﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CompteBancaire
{
    public class Conseiller : UtilisateurService, IConseillerService
    {
        public Conseiller(IAccesBD bd) : base(bd) { }
        public bool ajouterCompte(int idClient, Compte compte)
        {
            return bdd.ajouterCompte(idClient, compte);
        }

        public bool supprimerCompte(int idCompte)
        {
            return bdd.supprimerCompte(idCompte);
        }

        public List<Conseiller> listeConseiller()
        {
            return bdd.extraireConseillers();
        }

        public List<Client> listeClient(int idConseiller)
        {
            return bdd.extraireClients(idConseiller);
        }

        public List<Compte> listeCompte(int idClient)
        {
            return bdd.extraireComptes(idClient);
        }

        public bool modifierInfoClient(int idClient, Client nouveauClient)
        {
            List<Utilisateur> lc = new List<Utilisateur>();
            lc.Add(Utilisateur.copy_user(idClient, nouveauClient.User));
            return bdd.sauverClients(lc, u.Id);
        }

        public bool crediterCompte(int idCompte, double montant)
        {
            List<Historique> lh = new List<Historique>();
            List<Compte> lc = new List<Compte>();
            /* XXX -1 for test */
            Historique h = new Historique(DateTime.Now, montant, idCompte, -1);
            Compte c = bdd.extraireCompte(idCompte);
            Client cl = bdd.extraireClient(idCompte);
            c.doOperation(montant);
            lh.Add(h);
            lc.Add(c);
            return bdd.sauverComptes(lc, cl.User.Id) && bdd.sauverHistorique(lh, idCompte);
        }

        public bool debiterCompte(int idCompte, double montant)
        {
            return crediterCompte(idCompte, -montant);
        }

        public bool virementBancaire(int idCompteDebiteur, int idCompteCrediteur, double montant)
        {
            return debiterCompte(idCompteDebiteur, montant) && crediterCompte(idCompteCrediteur, montant);
        }
    }
}
